package com.sh.工厂模式.simplefactory;

import com.sh.工厂模式.ICourse;
import com.sh.工厂模式.JavaCourse;
import com.sh.工厂模式.PythonCourse;

/**
 * 简单工厂模式实现类
 * 提供一个创建产品对象的方法
 *      -- if else 实现
 *      -- 反射 实现
 *      -- class对象实现
 *  这个方法违反开闭原则了，添加新产品的时候，需要修改这个工厂的创建方法代码
 */
public class SimpleCourseFactory {

    // if else
    public ICourse create(String name) {
        if ("java".equals(name)) {
            return new JavaCourse();
        } else if ("python".equals(name)) {
            return new PythonCourse();
        }
        return null;
    }

    // 反射
    public ICourse createK(String className){
        try {
            if ( className!=null || !"".equals(className)){
                return (ICourse) Class.forName(className).newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    // class对象
    public ICourse create(Class< ? extends ICourse> clazz){
        try {
            if ( clazz!=null ){
                return clazz.newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return null;
    }
}
